<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<script>
    function Star(uname, age) {
        this.uname = uname
        this.age = age

        this.sing = function() {
            console.log(this.uname + "唱歌")
        }
    }

    const ldh = new Star("刘德华", 18)
    const zxy = new Star("张学友", 18)

    ldh.sing()
    zxy.sing()

    console.log(ldh.sing === zxy.sing)

    // 上面这种方法存在内存浪费的问题，所有new出来的对象，里面的sing方法是不同的，占用不同的内存空间，但是方法体都是一样的。
    // 为了解决这个问题，js的对象有个prototype原型对象，公共的方法放在原型对象上，那就是共享的方法
    // 原型对象的this也指向的是调用它的那个对象，实现了和java完全一样的功能

    Star.prototype.shareSing = function() {
        console.log(this.uname + "唱歌")
    }

    const zjl = new Star("周杰伦", 18)
    const ljj = new Star("林俊杰", 18)

    ldh.shareSing()
    zxy.shareSing()

    console.log(ldh.shareSing === zxy.shareSing)

</script>
    
</body>
</html>